//
//  CZHomeViewController.swift
//  CZWeibo
//
//  Created by 左凯旭 on 16/8/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

//cell 的标识
private let CZHomeViewCellId = "CZHomeViewCellId"

class CZHomeViewController: CZVistorController {

   //创建一个ViewModel
    private lazy var statusViewModel:CZStatusViewModel = CZStatusViewModel()
    
    
    //下拉刷新
    let refreControl = UIRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if !islogin {
              // 如果没有登录的话设置未登录信息和logo 也就没有必要再加载数据了 所以return
            visitorView?.setupVisitorInfo(nil, title: nil)
            return
        }
       
        setupTableViewInfo()
        
       //请求数据
        loadData()
        //接收通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadData", name: "reloadHomeVC", object: nil)
    }
    //实现通知中的方法
    func reloadData(){
        //刷新界面
        loadData()
        //滚动到想要的位置
        tableview.setContentOffset(CGPoint(x: 0,y: -64), animated: true)
    }
    
    
   
       // MARK: - 设置tableView相关信息
    func setupTableViewInfo(){
        //注册
        tableview.registerClass(CZStatusCell.self, forCellReuseIdentifier: CZHomeViewCellId)
        //设置代理
        tableview.dataSource = self
        tableview.delegate = self
        tableview.allowsSelection = false
//        tableview.rowHeight = 250
        
         // 设置高度(自动计算行高)(使用contetView 的高度来得到cell 高度)
        tableview.rowHeight = UITableViewAutomaticDimension
//
//         // 设置预估行高(预估行高越接近真实高度越好)
        tableview.estimatedRowHeight = 220
        //设置footerView
        tableview.tableFooterView = activityView
        //添加事件
        refreControl.addTarget(self, action: "refreAction", forControlEvents: UIControlEvents.ValueChanged)
        
        tableview.addSubview(refreControl)
        
        
        //分割线
        tableview.separatorStyle = .None
 
        
    }
   
    
    func refreAction(){
        loadData()
    }
    
    
    //懒加载菊花
    private lazy var activityView:UIActivityIndicatorView = {
       
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = AppThemeColor
        
        return view
    }()
    
    
    //析构函数
    deinit{
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
}


extension CZHomeViewController: UITableViewDataSource,UITableViewDelegate{

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusViewModel.dataArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableview.dequeueReusableCellWithIdentifier(CZHomeViewCellId, forIndexPath: indexPath) as! CZStatusCell
        
        cell.statusUserViewModel = statusViewModel.dataArray[indexPath.row]
        
        return cell
    }
    
    //即将显示的cell
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
         // 如果是最后一个cell  而且菊花没有动画
        if indexPath.row + 1 == statusViewModel.dataArray.count && !activityView.isAnimating(){
//            print(indexPath.row)
            //设置动画
            activityView.startAnimating()
            //请求数据
            loadData()
        }
        
        
    }
    
}

//提取一个请求数据的方法,方便多次的刷新数据
extension CZHomeViewController{
    
    func loadData(){
    // 请求数据 true 为上拉加载更多   false  下拉刷新
        statusViewModel.loadData(activityView.isAnimating()) { (isSuccess) in
            
           
            self.endRefreshing()
            if !isSuccess{
                print("请求失败")
                return
            }
            
            print("请求成功")
            //刷新UI
            self.tableview.reloadData()
        }
        
        
    }
    //停止动画
    func endRefreshing(){
        //停止动画
        self.activityView.stopAnimating()
        
        self.refreControl.endRefreshing()
    }
    
}













